package com.zhuty.aiBioHelper.enums;

/**
 * AI助手角色类型枚举
 * 用于区分不同的AI助手角色，实现业务隔离
 * 
 * @author zhuty
 */
public enum AiRoleType {
    
    /**
     * 医疗基因学专家
     * 专注于基因与疾病关联分析、遗传机制解释等医疗领域
     */
    MEDICAL_GENETICS("medical_genetics", "医疗基因学专家", "医疗基因学领域的AI助手"),
    
    /**
     * LiveRamp数据协作专家
     * 专注于数据协作平台、企业身份识别、营销技术等领域
     */
    LIVERAMP_DATA_EXPERT("liveramp_data_expert", "LiveRamp数据协作专家", "LiveRamp数据协作领域的专家");
    
    /**
     * 角色代码（用于API参数传递）
     */
    private final String code;
    
    /**
     * 角色名称（用于显示）
     */
    private final String name;
    
    /**
     * 角色描述
     */
    private final String description;
    
    AiRoleType(String code, String name, String description) {
        this.code = code;
        this.name = name;
        this.description = description;
    }
    
    public String getCode() {
        return code;
    }
    
    public String getName() {
        return name;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 根据角色代码获取枚举值
     * 
     * @param code 角色代码
     * @return 对应的枚举值
     * @throws IllegalArgumentException 如果找不到对应的角色类型
     */
    public static AiRoleType fromCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            return MEDICAL_GENETICS; // 默认返回医疗基因学专家
        }
        
        for (AiRoleType roleType : values()) {
            if (roleType.code.equals(code.trim())) {
                return roleType;
            }
        }
        
        throw new IllegalArgumentException("未知的AI角色类型: " + code);
    }
    
    /**
     * 检查是否为有效的角色代码
     * 
     * @param code 角色代码
     * @return 是否有效
     */
    public static boolean isValidCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            return true; // 空值被认为是有效的，会使用默认角色
        }
        
        for (AiRoleType roleType : values()) {
            if (roleType.code.equals(code.trim())) {
                return true;
            }
        }
        
        return false;
    }
    
    /**
     * 获取系统提示词资源路径
     * 
     * @return 系统提示词文件路径
     */
    public String getSystemPromptResource() {
        return switch (this) {
            case MEDICAL_GENETICS -> "system-prompt-medical.txt";
            case LIVERAMP_DATA_EXPERT -> "system-prompt-liveramp.txt";
        };
    }
    
    /**
     * 获取RAG知识库目录路径
     * 
     * @return RAG知识库目录路径
     */
    public String getRagDocsPath() {
        return switch (this) {
            case MEDICAL_GENETICS -> "docs/medical";
            case LIVERAMP_DATA_EXPERT -> "docs/liveramp";
        };
    }
}